package xkp.lesson3;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

public class TestField {
	public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException {
		//获取成员变量
		Class class1 = Class.forName("xkp.lesson1.Person");
		//1、获取所有的public成员变量
		System.out.println("***********获取所有的public成员变量************");
		Field[] fields = class1.getFields();
		for(Field field:fields) {
			System.out.println(field);
		}

		//2、获取所有的成员变量
		System.out.println("***********获取所有的成员变量***********");
		fields = class1.getDeclaredFields();
		for(Field field:fields) {
			System.out.println(field);
		}

		//3、获取指定的public成员变量
		System.out.println("***********获取指定的public成员变量***********");
		Field field1 = class1.getField("birthday");
		//如何使用
		//成员变量与成员方法一样，要依赖对象存在
		Object obj = class1.getConstructor(null).newInstance(null);
		field1.set(obj, "2010-11-11");
		System.out.println(field1.get(obj));

		//3、获取指定的非public成员变量
		System.out.println("***********获取指定的非public成员变量***********");
		Field field2 = class1.getDeclaredField("name");
		//如何使用
		//成员变量与成员方法一样，要依赖对象存在
		field2.setAccessible(true);
		field2.set(obj, "张三");
		System.out.println(field2.get(obj));
	}
}
